package org.wujiangbo.controller;

import com.alibaba.fastjson.JSONObject;
import org.wujiangbo.dto.OrderDto;
import org.springframework.amqp.AmqpException;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageDeliveryMode;
import org.springframework.amqp.core.MessagePostProcessor;
import org.springframework.amqp.core.MessageProperties;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.UUID;

/**
 * @desc 订单API接口
 * @author wujiangbo
 * @date 2022-04-02 09:40
 */
@RestController
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    //下单操作
    @GetMapping("/addOrder/{userId}")
    public String addOrder(@PathVariable("userId") Long userId){
        System.out.println("开始下单啦.........");

        /***********************************************************************************
         * 1、开始封装订单消息（模拟数据）
        ***********************************************************************************/
        OrderDto dto = new OrderDto();
        dto.setId(UUID.randomUUID().toString().replace("-", ""));//订单编号
        dto.setOrderMoney(800D);//订单金额
        dto.setUserId(userId);//用户ID
        //订单状态（0：待支付；1：已支付；2：已失效(超时)）
        /**
         * 1、提交订单，默认状态为0，待支付
         * 2、如果用户在指定的TTL时间内支付成功了，那么就将状态改为1
         * 3、如果用户在指定的TTL时间内未支付成功，那么就将状态改为2
         */
        dto.setOrderStatus("0");

        /***********************************************************************************
         * 2、发送带有过期时间的订单消息到RabbitMQ
        ***********************************************************************************/
        rabbitTemplate.convertAndSend(
                "normalExchange", //普通交换机名称
                "normalRoutingKey", //正常路由键
                JSONObject.toJSONString(dto)
                //,new MessagePostProcessor() { //定义消息属性处理类
                //    @Override
                //    public Message postProcessMessage(Message message) throws AmqpException {
                //        MessageProperties messageProperties = message.getMessageProperties();
                //        /**
                //         * 设置过期时间TTL（单位：毫秒）
                //         * 模拟：订单5秒内还未被消费，那么就进入死信队列
                //         */
                //        messageProperties.setExpiration("3000");
                //        //设置持久化
                //        messageProperties.setDeliveryMode(MessageDeliveryMode.PERSISTENT);
                //        return message;
                //    }
                //}
                );
        return "ID为" + userId + "的用户，您好，下单成功了，赶紧去支付吧.....";
    }
}